The dangling else is a problem in computer programming in which a seemingly well-defined statement can become ambiguous. In many programming languages one may write conditionally executed code in two forms: the if-then form, and the if-then-else form:
if a then s if a then s1 else s2
This gives rise to an ambiguity in interpretation whenever an if-then form appears as s1
in an if-then-else form:[1]
if a then if b then s else s2
In this example, s
is unambiguously executed when a
is true and b
is true, but one may interpret s2
as being executed when a
is false (thus attaching the else to the first if) or when a
is true and b
is false (thus attaching the else to the second if). In other words, one may see the previous statement as either of the following expressions:
if a then (if b then s) else s2 or if a then (if b then s else s2)
This is a problem that often comes up in compiler construction. The convention when dealing with the dangling else is to attach the else to the nearby if statement,[2] allowing for unambiguous context-free grammars, in particular. Programming languages like Pascal[3] and C[4] follow this convention, so there is no ambiguity in the semantics of the language, though the use of a parser generator may lead to ambiguous grammars.
Depending on the compiler construction approach, one may take different corrective actions to avoid ambiguity:
Programmers using C and languages with similar syntax sometimes standardize a practice of using braces to clearly define the intent of the statement. Similarly, some programmers use logical and ternary operators to avoid ambiguity.
The problem can also be solved by making explicit the link between an else and its if, within the syntax. This usually helps avoid human errors.[5] Possible solutions are: